home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 26 / AACD 26.iso / AACD / System / XFD / Developer / Sources / ASM / EDP1.a < prev    next >
Encoding:
Text File  |  2001-09-16  |  5.4 KB  |  317 lines

  1. *******************************************************
  2. **             XFD external decruncher               **
  3. **                for EDP1 cruncher                  **
  4. **             adapted by Wanted Team                **
  5. *******************************************************
  6.  
  7.     INCDIR    "dh2:Include/"
  8.     INCLUDE    "libraries/xfdmaster.i"
  9.  
  10. ; xfdForeman structure MUST be first thing in all external decrunchers
  11.  
  12. ForeMan        moveq    #-1,d0        ;security
  13.         rts
  14.         dc.l    XFDF_ID        ;id
  15.         dc.w    1        ;version
  16.         dc.w    0
  17.         dc.l    0,0        ;private
  18.         dc.l    S_EDP1        ;first slave
  19.  
  20. **************************************************
  21.  
  22. ; xfdSlave structure: this one doesn't support data scanning
  23.  
  24. S_EDP1        dc.l    0        ;no more slaves
  25.         dc.w    2        ;version
  26.         dc.w    39        ;master version
  27.         dc.l    N_EDP1        ;name
  28.         dc.w    XFDPFF_DATA!XFDPFF_RECOGLEN!XFDPFF_USERTARGET
  29.         dc.w    0
  30.         dc.l    RB_EDP1        ;recog buffer
  31.         dc.l    DB_EDP1        ;decrunch buffer
  32.         dc.l    0        ;recog segment
  33.         dc.l    0        ;decrunch segment
  34.         dc.w    0,0
  35.         dc.l    12+2
  36.  
  37.         dc.b    "$VER: EDP1 v2.0 (29 Aug 2000) by Wanted Team",0
  38. N_EDP1        dc.b    "EDP1 data cruncher",0
  39.         even
  40.  
  41. ;-------------------------------------------------
  42.  
  43. ; Recog buffer function: receives buffer + length in a0/d0
  44.  
  45. RB_EDP1        MOVEQ    #0,D0
  46.         CMP.L    #"EDP1",(A0)+
  47.         BNE.B    .Exit
  48.         TST.B    (A0)
  49.         BNE.B    .Exit
  50.         MOVE.L    (A0),D0
  51.  
  52.     move.l    D0,xfdrr_FinalTargetLen(A1)
  53.     btst    #0,D0
  54.     beq.b    .OK
  55.     addq.l    #1,D0
  56. .OK
  57.     add.l    #40204,D0            ; static buffer
  58.  
  59.         MOVE.L    D0,xfdrr_MinTargetLen(A1)
  60.         MOVEQ    #1,D0
  61. .Exit        RTS
  62.  
  63. ;-------------------------------------------------
  64.  
  65. ; Decrunch buffer function: receives bufferinfo in a0
  66. ; This style requires xfdmaster.library V39
  67. DB_EDP1        MOVEM.L    D2-D7/A2-A6,-(A7)
  68.         MOVEA.L    A0,A5
  69.         MOVE.L    xfdbi_UserTargetBuf(A5),A1
  70.         MOVE.L    xfdbi_SourceBuffer(A5),A0
  71.  
  72.     move.l    4(A0),D0
  73.     btst    #0,D0
  74.     beq.b    .OK
  75.     addq.l    #1,D0
  76. .OK
  77.     move.l    A1,A2
  78.     add.l    D0,A2
  79.     move.l    A2,-(SP)
  80.     bsr.b    D_EDP1
  81.     addq.l    #4,A7
  82.     moveq    #1,D0
  83.  
  84.         MOVEM.L    (A7)+,D2-D7/A2-A6
  85.         RTS
  86.  
  87. ;-------------------------------------------------
  88.  
  89. ; Decruncher from game "Black Viper" (c) 1996 LightShock/NEO Software
  90.  
  91. ; Input
  92. ; A0 = start of packed file
  93. ; A1 = destination
  94.  
  95. D_EDP1
  96.     MOVEM.L    D0-D7/A0-A6,-(SP)
  97.     MOVEA.L    A0,A6
  98.     MOVE.L    #0,D5
  99.     CMPI.L    #$45445031,(A0)+
  100.     BNE.S    lbC0032DC
  101.     MOVE.L    (A0)+,lbL00ACF4
  102.     MOVEQ    #0,D6
  103.     MOVE.W    (A0)+,D6
  104.     MOVE.L    D6,D0
  105.     ASL.L    #2,D0
  106.     ADDI.L    #10,D0
  107.     ADDA.L    D0,A6
  108.     SUBQ.L    #1,D6
  109. lbC0032CA    MOVE.L    (A0)+,D7
  110.     MOVE.L    A0,-(SP)
  111.     BSR.S    lbC00330C
  112.     MOVEA.L    (SP)+,A0
  113.     DBRA    D6,lbC0032CA
  114. ;    MOVEM.L    (SP)+,D0-D7/A0-A6
  115. ;    RTS
  116.  
  117. lbC0032DC
  118. ;    MOVE.W    #$FB0,D0
  119. ;    BSR.S    lbC0032E8
  120.     MOVEM.L    (SP)+,D0-D7/A0-A6
  121.     RTS
  122.  
  123. ;lbC0032E8    MOVE.W    #$32,D7
  124. ;lbC0032EC    CMPI.B    #$64,$DFF006
  125. ;    BNE.S    lbC0032EC
  126. ;lbC0032F6    CMPI.B    #$F4,$DFF006
  127. ;    BNE.S    lbC0032F6
  128. ;    MOVE.W    D0,$DFF180
  129. ;    DBRA    D7,lbC0032EC
  130. ;    RTS
  131.  
  132. lbC00330C
  133. ;    MOVEA.L    #lbL00ACF8,A0
  134.  
  135.     move.l    72(SP),A0
  136.  
  137.     MOVEQ    #0,D3
  138.     MOVEQ    #0,D4
  139.     MOVE.W    #9,(A0)
  140.     MOVE.W    #$100,6(A0)
  141.     MOVEA.L    A6,A2
  142.     MOVE.L    D5,D0
  143.     MOVE.L    D0,D1
  144.     ASR.L    #4,D0
  145.     ADDA.L    D0,A2
  146.     ADDA.L    D0,A2
  147.     ANDI.L    #15,D1
  148.     MOVEQ    #0,D0
  149.     MOVE.W    (A0),D0
  150.     MOVE.L    D0,D2
  151.     ADD.L    D0,D5
  152.     ADD.L    D0,D1
  153.     MOVE.L    (A2)+,D0
  154.     ROL.L    D1,D0
  155.     SUBI.L    #9,D2
  156.     MOVE.L    #$FF,D1
  157. lbC00334C    ROL.W    #1,D1
  158.     BSET    #0,D1
  159.     DBRA    D2,lbC00334C
  160.     AND.L    D1,D0
  161.     MOVE.W    D0,D3
  162.     MOVE.W    #1,$4008(A0)
  163.     MOVE.B    D0,8(A0)
  164.     MOVE.W    #1,$400A(A0)
  165.     MOVE.B    D0,$2008(A0)
  166.     MOVE.B    D0,2(A0)
  167.     MOVE.B    D0,(A1)+
  168.     SUBQ.L    #1,D7
  169.     MOVE.W    D3,D4
  170. lbC003378    MOVEA.L    A6,A2
  171.     MOVE.L    D5,D0
  172.     MOVE.L    D0,D1
  173.     ASR.L    #4,D0
  174.     ADDA.L    D0,A2
  175.     ADDA.L    D0,A2
  176.     ANDI.L    #15,D1
  177.     MOVEQ    #0,D0
  178.     MOVE.W    (A0),D0
  179.     MOVE.L    D0,D2
  180.     ADD.L    D0,D5
  181.     ADD.L    D0,D1
  182.     MOVE.L    (A2)+,D0
  183.     ROL.L    D1,D0
  184.     SUBI.L    #9,D2
  185.     MOVE.L    #$FF,D1
  186. lbC0033A4    ROL.W    #1,D1
  187.     BSET    #0,D1
  188.     DBRA    D2,lbC0033A4
  189.     AND.L    D1,D0
  190.     MOVE.W    D0,D3
  191.     CMP.W    6(A0),D0
  192.     BGE.L    lbC003448
  193.     CMPI.W    #$100,D3
  194.     BLT.S    lbC00342A
  195.     CLR.W    $400A(A0)
  196. ;    MOVEA.L    #lbL00CD00,A4
  197. ;    MOVEA.L    #lbL00AD00,A5
  198.  
  199.     lea    $2008(A0),A4
  200.     lea    8(A0),A5
  201.  
  202. lbC0033D0
  203. ;    MOVEA.L    #lbL00EB04,A2
  204. ;    MOVEA.L    #lbL012A04,A3
  205.  
  206.     lea    $3E0C(A0),A2
  207.     lea    $7D0C(A0),A3
  208.  
  209.     MOVE.B    0(A3,D0.L),(A4)+
  210.     ADDQ.W    #1,$400A(A0)
  211.     LSL.L    #1,D0
  212.     MOVE.W    0(A2,D0.L),D0
  213.     ANDI.L    #$FFFF,D0
  214.     CMPI.W    #$FF,D0
  215.     BGT.S    lbC0033D0
  216.     MOVE.B    D0,(A4)+
  217.     ADDQ.W    #1,$400A(A0)
  218.  
  219.     move.l    A3,-(SP)
  220.     lea    $2008(A0),A3
  221.  
  222. lbC0033FC    MOVE.B    -(A4),(A5)+
  223. ;    CMPA.L    #lbL00CD00,A4
  224.  
  225.     cmp.l    A3,A4
  226.  
  227.     BGT.S    lbC0033FC
  228.  
  229.     move.l    (SP)+,A3
  230.  
  231.     MOVE.W    $400A(A0),$4008(A0)
  232.     MOVE.B    8(A0),2(A0)
  233.     MOVE.W    $4008(A0),D0
  234.     SUBQ.W    #1,D0
  235. ;    MOVEA.L    #lbL00AD00,A5
  236.  
  237.     lea    8(A0),A5
  238.  
  239. lbC00341E    MOVE.B    (A5),(A4)+
  240.     MOVE.B    (A5)+,(A1)+
  241.     SUBQ.L    #1,D7
  242.     DBRA    D0,lbC00341E
  243.     BRA.S    lbC00346A
  244.  
  245. lbC00342A    MOVE.B    D0,8(A0)
  246.     MOVE.B    D0,2(A0)
  247.     MOVE.B    D0,$2008(A0)
  248.     MOVE.B    D0,(A1)+
  249.     SUBQ.L    #1,D7
  250.     MOVE.W    #1,$4008(A0)
  251.     MOVE.W    #1,$400A(A0)
  252.     BRA.S    lbC00346A
  253.  
  254. lbC003448
  255. ;    MOVEA.L    #lbL00CD00,A2
  256.  
  257.     lea    $2008(A0),A2
  258.  
  259.     MOVE.W    $400A(A0),D0
  260.     SUBQ.W    #1,D0
  261. lbC003454    MOVE.B    (A2)+,(A1)+
  262.     SUBQ.L    #1,D7
  263.     DBRA    D0,lbC003454
  264.     MOVE.B    2(A0),(A1)+
  265.     SUBQ.L    #1,D7
  266.     MOVE.B    2(A0),(A2)+
  267.     ADDQ.W    #1,$400A(A0)
  268. lbC00346A
  269. ;    MOVEA.L    #lbL00EB04,A2
  270. ;    MOVEA.L    #lbL012A04,A3
  271.  
  272.     lea    $3E0C(A0),A2
  273.     lea    $7D0C(A0),A3
  274.  
  275.     MOVEQ    #0,D0
  276.     MOVE.W    6(A0),D0
  277.     MOVE.B    2(A0),0(A3,D0.L)
  278.     LSL.W    #1,D0
  279.     MOVE.W    D4,0(A2,D0.L)
  280.     ADDQ.W    #1,6(A0)
  281.     CMPI.W    #13,(A0)
  282.     BGE.S    lbC0034D2
  283.     MOVE.W    6(A0),D0
  284.     CMPI.L    #$200,D0
  285.     BGE.S    lbC0034A4
  286.     MOVE.W    #9,(A0)
  287.     BRA.S    lbC0034D2
  288.  
  289. lbC0034A4    CMPI.L    #$400,D0
  290.     BGE.S    lbC0034B2
  291.     MOVE.W    #10,(A0)
  292.     BRA.S    lbC0034D2
  293.  
  294. lbC0034B2    CMPI.L    #$800,D0
  295.     BGE.S    lbC0034C0
  296.     MOVE.W    #11,(A0)
  297.     BRA.S    lbC0034D2
  298.  
  299. lbC0034C0    CMPI.L    #$1000,D0
  300.     BGE.S    lbC0034CE
  301.     MOVE.W    #12,(A0)
  302.     BRA.S    lbC0034D2
  303.  
  304. lbC0034CE    MOVE.W    #13,(A0)
  305. lbC0034D2    MOVE.W    D3,D4
  306.     TST.L    D7
  307.     BGT.L    lbC003378
  308.     RTS
  309.  
  310. lbL00ACF4    ds.l    1
  311.  
  312. ;lbL00ACF8    ds.l    2
  313. ;lbL00AD00    ds.l    $800
  314. ;lbL00CD00    ds.l    $781
  315. ;lbL00EB04    ds.l    $FC0
  316. ;lbL012A04    ds.l    $800
  317.